package com.gustavo.sistema.bean;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;

import com.gustavo.sistema.model.Cliente;
import com.gustavo.sistema.service.ClienteService;
import com.gustavo.sistema.service.ErroNaFaseService;

@Named("clienteBean")
@SessionScoped
public class ClienteBean implements Serializable{

	@Inject
	private ClienteService clienteService;

	private List<Cliente> clientes;

	private Cliente cliente;

	private boolean alterar;

	/**
	 * Obtem a lista de clientes
	 * @return Lista de clientes
	 * @throws ErroNaFaseBean 
	 */
	public List<Cliente> getAlunos() {
		try {
			if (clientes == null) {
				clientes = clienteService.listarClientes();
			}
			return clientes;
		} catch (ErroNaFaseService e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * Abre a tela de edi��o de cliente
	 * 
	 * @param cliente
	 *            Cliente a editar
	 * @return
	 */
	public String alterar(Cliente cliente) {
		this.cliente = cliente;
		this.alterar = true;
		return "editar_cliente";
	}

	/**
	 * Exclui um cliente
	 * 
	 * @param cliente
	 *            Cliente para excluir
	 * @throws ErroNaFaseBean 
	 */
	public String excluir(Cliente cliente)  {
		try {
			clienteService.excluir(cliente.getId());
			cliente = null;

			// Apos a exclusao, faz um redirect
			return "listar_cliente?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			e.printStackTrace();
			return null;
		}
	}

	
	public String adicionar() {
		try {

			clienteService.inserir(cliente);

			cliente = null;
			clientes = null;
			alterar = false;
			return "PrimeiroJSF?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			e.printStackTrace();
			return null;

		}
	}
	
	public String editar() {
		try {

			clienteService.atualizar(cliente);

			cliente = null;
			clientes = null;
			alterar = false;
			return "listar_clientes?faces-redirect=true";
		} catch (ErroNaFaseService e) {
			e.printStackTrace();
			return null;

		}
	}

	public Cliente getCliente() {
		if (cliente == null) {
			cliente = new Cliente();
		}
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public boolean isAlterar() {
		return alterar;
	}

	public void setAlterar(boolean alterar) {
		this.alterar = alterar;
	}

}
